/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package educar.abmResolucion;

import educar.controllers.PrincipalAlumnoController;
import educar.db.JPA;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;

/**
 *Esta clase funciona como mediador (escuchador), resepta(captura) los eventos de acciones,
 * de mouse y de ventana, esta clase se comunica con las clases ModificarResolucioController
 * y AgregarResolucioController, la clase ResolucionController es 
 * invocada por la clase principal del Alumno, la PrincipalAlumnoController.
 * @author Flubber
 */
public class ResolucionController implements ActionListener,MouseListener, WindowListener {
    
    //Atributo usado para crear una instacia de la clase principal del Alumno    
    private PrincipalAlumnoController principalAlumnoController;
    
    //Atributo usado para crer una vista de resolucion (ventana)
    private ResolucionView resolucionView;
    
// <editor-fold defaultstate="collapsed" desc="Constructor">
    /**
     * <hr>
     * ResolucionController(): Constructor de la clase ResolucionController
     * <hr>
     * @param principalAlumnoControl 
     */    
    public ResolucionController(PrincipalAlumnoController principalAlumnoControl){ 
        principalAlumnoController = principalAlumnoControl;
        resolucionView = new ResolucionView();
        resolucionView.setActionListener(this);
        resolucionView.setMouseListener(this);
        resolucionView.setWindowListener(this);
    }
 // </editor-fold>

// <editor-fold defaultstate="collapsed" desc="Action setView">    
    /**
     * <hr>
     * setView(): Hace visible a una ventana de resolucion.
     * <hr>
     */    
    public void setView() {
        Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
        int x = 0;
        int y = 50;
        resolucionView.setBounds(x, y, screen.width, (screen.height)-90);
        resolucionView.setModeloTabla(listarResolucion());
        resolucionView.setVisible(true);
    }
// </editor-fold> 

// <editor-fold defaultstate="collapsed" desc="Metodos ActionPermormed">    
    /**
     * <hr>
     * actionPerformed():metodo que recibe un evento de un boton y dependiendo de
     * este este evento puede agregar o no una resolucion.
     * <hr>
     * @param e 
     */    
    @Override
    public void actionPerformed(ActionEvent e) {
        //Atributo usado para verificar procedencia (boton)           
        Object source = e.getSource();
        if (resolucionView.getJbAgregar() == source) {    //Boton Agregar
                AgregarResolucionController agregarResolucionController = new AgregarResolucionController(this);
                agregarResolucionController.setView();
        }
        
        if (resolucionView.getJbCancelar() == source) {    //Boton Cancelar
            resolucionView.dispose();
            principalAlumnoController.setView();
        }          
    }//Fin del metodo actionPerformed()

    /**
     * <hr>
     * mouseClicked(): Metodo usado para detectar el evento del mouse en la ventana de resolucion
     * <hr>
     * @param e 
     */
    @Override
    public void mouseClicked(MouseEvent e) {
        //Atributo usado para verificar procedencia         
        Object source = e.getSource();
        if ((resolucionView.getJTResolucion() == source) && (e.getClickCount()==2)) {    //Tabla Resolucion y Clickeado dos veces
            ModificarResolucionController modificarResolucionController = new ModificarResolucionController(this);
            int fila = resolucionView.getJTResolucion().getSelectedRow();
            Vector registro = (Vector) (resolucionView.getModeloTabla().getDataVector()).elementAt(fila);
            modificarResolucionController.setView(registro, fila);
        }    
    }//Fin del metodo mouseClicked()
// </editor-fold>    

// <editor-fold defaultstate="collapsed" desc="Metodos auxiliares usados">    
    /**
     * <hr>
     * AgregarATabla(): Agrega a la tabla de la ventana un elemento
     * <hr>
     * @param item elemento a agregar
     */    
    public void agregarATabla(String[] item){
        Object[] vector = new Object[4];
        vector[0] = (boolean) false;
        for (int i = 1; i < 4; i++){
            vector[i] = item[i-1];
            System.out.println(vector[i]);
        }
        resolucionView.getModeloTabla().addRow(vector);
    }//Fin del metodo agregarATabla(String[])

    /**
     * <hr>
     * actualizarFila(): Modifica los atrubitos de un elemento de la tabla
     * <hr>
     * @param item elemento modificado
     * @param fila <code>int</code> con la fila en onde se encuentra el elemento a modificar
     */ 
    public void actualizarFila(String[] item, int fila){
        resolucionView.getModeloTabla().setValueAt(false, fila, 0);
        for (int i = 1; i < 4; i++){
            resolucionView.getModeloTabla().setValueAt(item[i-1], fila, i);
        }
    }//Fin del metodo actualizarFila(String[], int)
    
    /**
     * <hr>
     * listarResolucion(): Lista todas las resoluciones de la base de datos en la tabla
     * <hr>
     * @return DefaultTableModel la tabla con todas las resoluciones
     */
    public DefaultTableModel listarResolucion() {
            JPA jpa = new JPA();
            Object[] vector = new Object[6];
            DefaultTableModel tabla = (DefaultTableModel) resolucionView.getModeloTabla(); 
            ResultSet res = jpa.showAll("resolucion");
            try {
                while (res.next()) {
                    vector[0] = false;
                    vector[1] = res.getObject(5);
                    vector[2] = res.getObject(6);
                    vector[3] = res.getObject(7);
                    vector[4] = res.getObject(4);
                    vector[5] = res.getObject(8);
                    tabla.addRow(vector);
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            return tabla;
    }//Fin del metodo listarUser()    
    
    /**
     * <hr>
     * windowClosing():metodo que recibe un evento de una ventana y dependiendo de
     * este evento realiza las operaciones necesarias.
     * <hr>
     * @param e 
     */    
    @Override
    public void windowClosing(WindowEvent e) {
            principalAlumnoController.setView();
    }//Fin del metodo windowClosing()
    
// </editor-fold>      

// <editor-fold defaultstate="collapsed" desc="Metodos ActionPerformed no usadas"> 
    @Override
    public void mousePressed(MouseEvent e) {
    }

    @Override
    public void mouseReleased(MouseEvent e) {
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e) {
    }

    @Override
    public void windowOpened(WindowEvent e) {
    }

    @Override
    public void windowClosed(WindowEvent e) {
    }

    @Override
    public void windowIconified(WindowEvent e) {
    }

    @Override
    public void windowDeiconified(WindowEvent e) {
    }

    @Override
    public void windowActivated(WindowEvent e) {
    }

    @Override
    public void windowDeactivated(WindowEvent e) {
    }
// </editor-fold>    
    
}//Fin de la clase ResolucionController
